using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using Tx.OCC.UI;
using Point = System.Drawing.Point;
using Occt;

namespace IE_WinForms
{
    /// <summary>
    /// Summary description for Form2.
    /// </summary>
    public class Form2 : System.Windows.Forms.Form
    {
        public OcctViewerCtrl OcctViewer { get; private set; }
        private System.ComponentModel.IContainer components;

        public Form2()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // Create OCCT proxy object
            //
            OcctViewer = new OcctViewerCtrl();
            OcctViewer.Dock = DockStyle.Fill;
            this.Controls.Add(OcctViewer);
            myCurrentMode = CurrentAction3d.CurAction3d_Nothing;
            myCurrentPressedKey = CurrentPressedKey.CurPressedKey_Nothing;
            myDegenerateModeIsOn = true;
            IsRectVisible = false;
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form2));
            this.imageList1 = new System.Windows.Forms.ImageList(this.components);
            this.myPopup = new System.Windows.Forms.ContextMenu();
            this.menuItem1 = new System.Windows.Forms.MenuItem();
            this.myPopupObject = new System.Windows.Forms.ContextMenu();
            this.ContextWireframe = new System.Windows.Forms.MenuItem();
            this.ContextShading = new System.Windows.Forms.MenuItem();
            this.ContextColor = new System.Windows.Forms.MenuItem();
            this.ContextMaterial = new System.Windows.Forms.MenuItem();
            this.ContMatBrass = new System.Windows.Forms.MenuItem();
            this.ContMenBronze = new System.Windows.Forms.MenuItem();
            this.ContMenCopper = new System.Windows.Forms.MenuItem();
            this.ContMenGold = new System.Windows.Forms.MenuItem();
            this.ContMenPewt = new System.Windows.Forms.MenuItem();
            this.ContMenPlaster = new System.Windows.Forms.MenuItem();
            this.ContMenPlastic = new System.Windows.Forms.MenuItem();
            this.ContMenSilver = new System.Windows.Forms.MenuItem();
            this.ContMenTranc = new System.Windows.Forms.MenuItem();
            this.ContMenDelete = new System.Windows.Forms.MenuItem();
            this.SuspendLayout();
            // 
            // imageList1
            // 
            this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
            this.imageList1.Images.SetKeyName(0, "");
            this.imageList1.Images.SetKeyName(1, "");
            this.imageList1.Images.SetKeyName(2, "");
            this.imageList1.Images.SetKeyName(3, "");
            this.imageList1.Images.SetKeyName(4, "");
            this.imageList1.Images.SetKeyName(5, "");
            this.imageList1.Images.SetKeyName(6, "");
            this.imageList1.Images.SetKeyName(7, "");
            this.imageList1.Images.SetKeyName(8, "");
            this.imageList1.Images.SetKeyName(9, "");
            this.imageList1.Images.SetKeyName(10, "");
            this.imageList1.Images.SetKeyName(11, "");
            this.imageList1.Images.SetKeyName(12, "");
            this.imageList1.Images.SetKeyName(13, "");
            this.imageList1.Images.SetKeyName(14, "");
            this.imageList1.Images.SetKeyName(15, "");
            // 
            // myPopup
            // 
            this.myPopup.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItem1});
            // 
            // menuItem1
            // 
            this.menuItem1.Index = 0;
            this.menuItem1.Text = "Change &Background";
            this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
            // 
            // myPopupObject
            // 
            this.myPopupObject.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.ContextWireframe,
            this.ContextShading,
            this.ContextColor,
            this.ContextMaterial,
            this.ContMenTranc,
            this.ContMenDelete});
            this.myPopupObject.Popup += new System.EventHandler(this.myPopupObject_Popup);
            // 
            // ContextWireframe
            // 
            this.ContextWireframe.Index = 0;
            this.ContextWireframe.Text = "Wireframe";
            this.ContextWireframe.Click += new System.EventHandler(this.ContextWireframe_Click);
            // 
            // ContextShading
            // 
            this.ContextShading.Index = 1;
            this.ContextShading.Text = "Shading";
            this.ContextShading.Click += new System.EventHandler(this.ContextShading_Click);
            // 
            // ContextColor
            // 
            this.ContextColor.Index = 2;
            this.ContextColor.Text = "Color";
            this.ContextColor.Click += new System.EventHandler(this.ContextColor_Click);
            // 
            // ContextMaterial
            // 
            this.ContextMaterial.Index = 3;
            this.ContextMaterial.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.ContMatBrass,
            this.ContMenBronze,
            this.ContMenCopper,
            this.ContMenGold,
            this.ContMenPewt,
            this.ContMenPlaster,
            this.ContMenPlastic,
            this.ContMenSilver});
            this.ContextMaterial.Text = "Material";
            // 
            // ContMatBrass
            // 
            this.ContMatBrass.Index = 0;
            this.ContMatBrass.Text = "&Brass";
            this.ContMatBrass.Click += new System.EventHandler(this.ContMatBrass_Click);
            // 
            // ContMenBronze
            // 
            this.ContMenBronze.Index = 1;
            this.ContMenBronze.Text = "&Bronze";
            this.ContMenBronze.Click += new System.EventHandler(this.ContMenBronze_Click);
            // 
            // ContMenCopper
            // 
            this.ContMenCopper.Index = 2;
            this.ContMenCopper.Text = "&Copper";
            this.ContMenCopper.Click += new System.EventHandler(this.ContMenCopper_Click);
            // 
            // ContMenGold
            // 
            this.ContMenGold.Index = 3;
            this.ContMenGold.Text = "&Gold";
            this.ContMenGold.Click += new System.EventHandler(this.ContMenGold_Click);
            // 
            // ContMenPewt
            // 
            this.ContMenPewt.Index = 4;
            this.ContMenPewt.Text = "&Pewter";
            this.ContMenPewt.Click += new System.EventHandler(this.ContMenPewt_Click);
            // 
            // ContMenPlaster
            // 
            this.ContMenPlaster.Index = 5;
            this.ContMenPlaster.Text = "&Plaster";
            this.ContMenPlaster.Click += new System.EventHandler(this.ContMenPlaster_Click);
            // 
            // ContMenPlastic
            // 
            this.ContMenPlastic.Index = 6;
            this.ContMenPlastic.Text = "&Plastic";
            this.ContMenPlastic.Click += new System.EventHandler(this.ContMenPlastic_Click);
            // 
            // ContMenSilver
            // 
            this.ContMenSilver.Index = 7;
            this.ContMenSilver.Text = "&Silver";
            this.ContMenSilver.Click += new System.EventHandler(this.ContMenSilver_Click);
            // 
            // ContMenTranc
            // 
            this.ContMenTranc.Index = 4;
            this.ContMenTranc.Text = "&Trancparency";
            this.ContMenTranc.Click += new System.EventHandler(this.ContMenTranc_Click);
            // 
            // ContMenDelete
            // 
            this.ContMenDelete.Index = 5;
            this.ContMenDelete.Text = "&Delete";
            this.ContMenDelete.Click += new System.EventHandler(this.ContMenDelete_Click);
            // 
            // Form2
            // 
            this.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
            this.AutoScaleBaseSize = new System.Drawing.Size(10, 21);
            this.ClientSize = new System.Drawing.Size(622, 615);
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.Name = "Form2";
            this.Text = "Document";
            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            this.Closed += new System.EventHandler(this.Form2_Closed);
            this.Load += new System.EventHandler(this.Form2_Load);
            this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form2_KeyDown);
            this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.Form2_KeyUp);
            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form2_MouseDown);
            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form2_MouseMove);
            this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form2_MouseUp);
            this.ResumeLayout(false);

        }
        #endregion

        private System.Windows.Forms.ImageList imageList1;
        private System.Windows.Forms.ContextMenu myPopup;
        private System.Windows.Forms.ContextMenu myPopupObject;
        private System.Windows.Forms.MenuItem ContextWireframe;
        private System.Windows.Forms.MenuItem ContextShading;
        private System.Windows.Forms.MenuItem ContextColor;
        private System.Windows.Forms.MenuItem ContextMaterial;
        private System.Windows.Forms.MenuItem ContMatBrass;
        private System.Windows.Forms.MenuItem ContMenBronze;
        private System.Windows.Forms.MenuItem ContMenCopper;
        private System.Windows.Forms.MenuItem ContMenGold;
        private System.Windows.Forms.MenuItem ContMenPewt;
        private System.Windows.Forms.MenuItem ContMenPlaster;
        private System.Windows.Forms.MenuItem ContMenPlastic;
        private System.Windows.Forms.MenuItem ContMenSilver;
        private System.Windows.Forms.MenuItem ContMenTranc;
        private System.Windows.Forms.MenuItem ContMenDelete;
        private System.Windows.Forms.MenuItem menuItem1;

        private int myDocumentIndex, myViewIndex;

        protected CurrentAction3d myCurrentMode;
        protected CurrentPressedKey myCurrentPressedKey;
        protected float myCurZoom;
        protected bool myDegenerateModeIsOn;
        protected int myXmin;
        protected int myYmin;
        protected int myXmax;
        protected int myYmax;
        protected int theButtonDownX;
        protected int theButtonDownY;
        // for erasing of rectangle
        protected int theRectDownX;
        protected int theRectDownY;
        protected bool IsRectVisible;

        private void Form2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
//             switch (e.Button)
//             {
//                 case MouseButtons.Left:
//                     myXmin = e.X; myYmin = e.Y;
//                     myXmax = e.X; myYmax = e.Y;
//                     if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl)
//                         // start the dinamic zooming....
//                         myCurrentMode = CurrentAction3d.CurAction3d_DynamicZooming;
//                     else
//                     {
//                         switch (myCurrentMode)
//                         {
//                             case CurrentAction3d.CurAction3d_Nothing:
//                                 if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Shift)
//                                     MultiDragEvent(myXmax, myYmax, -1);
//                                 else
//                                     DragEvent(myXmax, myYmax, -1);
//                                 break;
//                             case CurrentAction3d.CurAction3d_DynamicRotation:
//                                 if (!myDegenerateModeIsOn)
//                                     occtProxy.SetDegenerateModeOn();
//                                 //start the rotation
//                                 occtProxy.StartRotation(e.X, e.Y);
//                                 break;
//                             case CurrentAction3d.CurAction3d_WindowZooming:
//                                 this.Cursor = System.Windows.Forms.Cursors.Hand;
//                                 break;
//                             default:
//                                 break;
//                         }
//                     }
//                     break;
//                 case MouseButtons.Right:
//                     //MessageBox.Show("right mouse button is down");
//                     if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl)
//                     {
//                         if (!myDegenerateModeIsOn)
//                             occtProxy.SetDegenerateModeOn();
//                         occtProxy.StartRotation(e.X, e.Y);
//                     }
//                     else
//                         Popup(e.X, e.Y);
//                     break;
//                 default:
//                     break;
//             }
        }

        private void Form2_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.Shift)
                myCurrentPressedKey = CurrentPressedKey.CurPressedKey_Shift;
            else if (e.Control)
                myCurrentPressedKey = CurrentPressedKey.CurPressedKey_Ctrl;
        }

        private void Form2_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            myCurrentPressedKey = CurrentPressedKey.CurPressedKey_Nothing;
        }

        protected void MultiDragEvent(int x, int y, int theState)
        {
            if (theState == -1)
            {
                theButtonDownX = x;
                theButtonDownY = y;
            }
//             else if (theState == 1)
//                 myOCCTProxy.ShiftSelect(Math.Min(theButtonDownX, x), Math.Min(theButtonDownY, y),
//                         Math.Max(theButtonDownX, x), Math.Max(theButtonDownY, y));
        }

        protected void DragEvent(int x, int y, int theState)
        {
            if (theState == -1) //mouse is down
            {
                theButtonDownX = x;
                theButtonDownY = y;
            }
            else if (theState == 1) //mouse is up
            {
//                 myOCCTProxy.Select(Math.Min(theButtonDownX, x), Math.Min(theButtonDownY, y),
//                         Math.Max(theButtonDownX, x), Math.Max(theButtonDownY, y));
            }
        }

        protected void Popup(int x, int y)
        {
//             System.Drawing.Point p = new Point(x, y);
//             if (this.occtProxy.IsObjectSelected())
//                 this.myPopupObject.Show(this, p);
//             else
//                 this.myPopup.Show(this, p);
        }

        private void Form2_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
        {
//             switch (e.Button)
//             {
//                 case MouseButtons.Left:
//                     if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl)
//                         return;
//                     switch (myCurrentMode)
//                     {
//                         case CurrentAction3d.CurAction3d_Nothing:
//                             if (e.X == myXmin && e.Y == myYmin)
//                             {
//                                 myXmax = e.X; myYmax = e.Y;
//                                 if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Shift)
//                                     MultiInputEvent(myXmax, myYmax);
//                                 else
//                                     InputEvent(myXmax, myYmax);
//                             }
//                             else
//                             {
//                                 myXmax = e.X; myYmax = e.Y;
//                                 DrawRectangle(false);
//                                 if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Shift)
//                                     MultiDragEvent(myXmax, myYmax, 1);
//                                 else
//                                     DragEvent(myXmax, myYmax, 1);
//                             }
//                             break;
//                         case CurrentAction3d.CurAction3d_DynamicZooming:
//                             myCurrentMode = CurrentAction3d.CurAction3d_Nothing;
//                             break;
//                         case CurrentAction3d.CurAction3d_WindowZooming:
//                             myXmax = e.X; myYmax = e.Y;
//                             DrawRectangle(false);
//                             int ValZWMin = 1;
//                             if (Math.Abs(myXmax - myXmin) > ValZWMin && Math.Abs(myXmax - myYmax) > ValZWMin)
//                                 occtProxy.WindowFitAll(myXmin, myYmin, myXmax, myYmax);
//                             this.Cursor = System.Windows.Forms.Cursors.Default;
//                             IE_WinForms.Form1 f = (IE_WinForms.Form1)this.ParentForm;
//                             f.SelectionChanged();
//                             myCurrentMode = CurrentAction3d.CurAction3d_Nothing;
//                             break;
//                         case CurrentAction3d.CurAction3d_DynamicPanning:
//                             myCurrentMode = CurrentAction3d.CurAction3d_Nothing;
//                             break;
//                         case CurrentAction3d.CurAction3d_GlobalPanning:
//                             occtProxy.Place(e.X, e.Y, myCurZoom);
//                             myCurrentMode = CurrentAction3d.CurAction3d_Nothing;
//                             break;
//                         case CurrentAction3d.CurAction3d_DynamicRotation:
//                             myCurrentMode = CurrentAction3d.CurAction3d_Nothing;
//                             if (!myDegenerateModeIsOn)
//                             {
//                                 occtProxy.SetDegenerateModeOff();
//                                 myDegenerateModeIsOn = false;
//                             }
//                             else
//                             {
//                                 occtProxy.SetDegenerateModeOn();
//                                 myDegenerateModeIsOn = true;
//                             }
//                             break;
//                         default:
//                             break;
// 
//                     }
//                     break;
//                 case MouseButtons.Right:
//                     if (!myDegenerateModeIsOn)
//                     {
//                         occtProxy.SetDegenerateModeOff();
//                         myDegenerateModeIsOn = false;
//                     }
//                     else
//                     {
//                         occtProxy.SetDegenerateModeOn();
//                         myDegenerateModeIsOn = true;
//                     }
//                     break;
//                 default:
//                     break;
//             }
// 
//             IE_WinForms.Form1 parent = (IE_WinForms.Form1)this.ParentForm;
//             parent.SelectionChanged();
        }

        protected void MultiInputEvent(int x, int y)
        {
            //myOCCTProxy.ShiftSelect();
        }

        protected void InputEvent(int x, int y)
        {
            //myOCCTProxy.Select();
        }

        private void DrawRectangle(bool draw)
        {
//             Graphics gr = Graphics.FromHwnd(this.Handle);
//             System.Drawing.Pen p = null;
//             if (this.IsRectVisible || (!draw))//erase the rect
//             {
//                 p = new Pen(occtProxy.BackgroundColor().ToSystemColor());
//                 this.IsRectVisible = false;
//                 this.occtProxy.UpdateView();
//             }
//             else if (draw)
//             {
//                 p = new Pen(System.Drawing.Color.White);
//                 this.IsRectVisible = true;
//             }
//             if (p == null)
//                 return;
//             int x = Math.Min(this.myXmin, this.myXmax);
//             int y = Math.Min(this.myYmin, this.myYmax);
//             gr.DrawRectangle(p, x, y, Math.Abs(myXmax - myXmin), Math.Abs(myYmax - myYmin));
//             this.theRectDownX = Math.Max(this.myXmin, this.myXmax);
//             this.theRectDownY = Math.Max(this.myYmin, this.myYmax);
        }

        private void Form2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
//             if (e.Button == MouseButtons.Left) //left button is pressed
//             {
//                 if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl)
//                 {
//                     occtProxy.Zoom(myXmax, myYmax, e.X, e.Y);
//                     myXmax = e.X; myYmax = e.Y;
//                 }
//                 else
//                 {
//                     switch (myCurrentMode)
//                     {
//                         case CurrentAction3d.CurAction3d_Nothing:
//                             DrawRectangle(false);
//                             myXmax = e.X; myYmax = e.Y;
//                             DrawRectangle(true);
//                             break;
//                         case CurrentAction3d.CurAction3d_DynamicZooming:
//                             occtProxy.Zoom(myXmax, myYmax, e.X, e.Y);
//                             myXmax = e.X; myYmax = e.Y;
//                             break;
//                         case CurrentAction3d.CurAction3d_WindowZooming:
//                             DrawRectangle(false);
//                             myXmax = e.X; myYmax = e.Y;
//                             DrawRectangle(true);//add brush here
//                             break;
//                         case CurrentAction3d.CurAction3d_DynamicPanning:
//                             occtProxy.Pan(e.X - myXmax, myYmax - e.Y);
//                             myXmax = e.X; myYmax = e.Y;
//                             break;
//                         case CurrentAction3d.CurAction3d_GlobalPanning:
//                             break;
//                         case CurrentAction3d.CurAction3d_DynamicRotation:
//                             occtProxy.Rotation(e.X, e.Y);
//                             occtProxy.RedrawView();
//                             break;
//                         default:
//                             break;
//                     }
//                 }
//             } // e.Button == MouseButtons.Left
//             else if (e.Button == MouseButtons.Middle)
//             {
//                 if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl)
//                 {
//                     occtProxy.Pan(e.X - myXmax, myYmax - e.Y);
//                     myXmax = e.X; myYmax = e.Y;
//                 }
//             }//e.Button=MouseButtons.Middle
//             else if (e.Button == MouseButtons.Right) //right button is pressed
//             {
//                 if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl)
//                     occtProxy.Rotation(e.X, e.Y);
//             }
//             else // no buttons are pressed
//             {
//                 myXmax = e.X; myYmax = e.Y;
//                 if (myCurrentPressedKey == CurrentPressedKey.CurPressedKey_Shift)
//                     MultiMoveEvent(e.X, e.Y);
//                 else
//                     MoveEvent(e.X, e.Y);
//             }


        }

        protected void MultiMoveEvent(int x, int y)
        {
            //occtProxy.MoveTo(x, y);
        }

        protected void MoveEvent(int x, int y)
        {
            //occtProxy.MoveTo(x, y);
        }

        public void SetDisplayMode(AIS_DisplayMode aMode)
        {
            //occtProxy.SetDisplayMode(aMode);
        }

        public void ChangeColor(bool IsObjectColor)
        {
//             Quantity_Color color = IsObjectColor ? occtProxy.ObjectColor() : occtProxy.BackgroundColor();
//             System.Windows.Forms.ColorDialog ColDlg = new ColorDialog();
//             ColDlg.Color = color.ToSystemColor();
//             if (ColDlg.ShowDialog() == DialogResult.OK)
//             {
//                 var c = ColDlg.Color.ToQuantityColor();
//                 if (IsObjectColor)
//                     occtProxy.SetColor(c);
//                 else
//                     occtProxy.SetBackgroundColor(c);
//             }
//             this.occtProxy.UpdateCurrentViewer();

        }

        public void DeleteObjects()
        {
//             occtProxy.EraseObjects();
//             IE_WinForms.Form1 parent = (IE_WinForms.Form1)this.ParentForm;
//             parent.SelectionChanged();
        }
        public void ImportModel(ModelFormat format)
        {
//             int theformat = 10;
//             System.Windows.Forms.OpenFileDialog openDialog = new OpenFileDialog();
// 
//             string DataDir = Environment.GetEnvironmentVariable("CSF_OCCTDataPath");
// 
//             string filter = "";
// 
//             switch (format)
//             {
//                 case ModelFormat.BREP:
//                     openDialog.InitialDirectory = (DataDir + "\\occ");
//                     theformat = 0;
//                     filter = "BREP Files (*.brep *.rle)|*.brep; *.rle";
//                     break;
//                 case ModelFormat.STEP:
//                     openDialog.InitialDirectory = (DataDir + "\\step");
//                     theformat = 1;
//                     filter = "STEP Files (*.stp *.step)|*.stp; *.step";
//                     break;
//                 case ModelFormat.IGES:
//                     openDialog.InitialDirectory = (DataDir + "\\iges");
//                     theformat = 2;
//                     filter = "IGES Files (*.igs *.iges)|*.igs; *.iges";
//                     break;
//                 default:
//                     break;
//             }
//             openDialog.Filter = filter + "|All files (*.*)|*.*";
//             if (openDialog.ShowDialog() == DialogResult.OK)
//             {
//                 string filename = openDialog.FileName;
//                 if (filename == "")
//                     return;
//                 this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
//                 if (!occtProxy.TranslateModel(filename, theformat, true))
//                     MessageBox.Show("Cann't read this file", "Error!",
//                             MessageBoxButtons.OK, MessageBoxIcon.Warning);
//                 this.Cursor = System.Windows.Forms.Cursors.Default;
//             }
//             this.occtProxy.ZoomAllView();
        }

        public void ExportModel(ModelFormat format)
        {
//             int theformat = 10;
//             System.Windows.Forms.SaveFileDialog saveDialog = new SaveFileDialog();
//             string DataDir = Environment.GetEnvironmentVariable("CSF_OCCTDataPath");
//             string filter = "";
//             switch (format)
//             {
//                 case ModelFormat.BREP:
//                     saveDialog.InitialDirectory = (DataDir + "\\occ");
//                     theformat = 0;
//                     filter = "BREP Files (*.brep *.rle)|*.brep; *.rle";
//                     break;
//                 case ModelFormat.STEP:
//                     saveDialog.InitialDirectory = (DataDir + "\\step");
//                     theformat = 1;
//                     filter = "STEP Files (*.stp *.step)|*.step; *.stp";
//                     break;
//                 case ModelFormat.IGES:
//                     saveDialog.InitialDirectory = (DataDir + "\\iges");
//                     theformat = 2;
//                     filter = "IGES Files (*.igs *.iges)| *.iges; *.igs";
//                     break;
//                 case ModelFormat.VRML:
//                     saveDialog.InitialDirectory = (DataDir + "\\vrml");
//                     theformat = 3;
//                     filter = "VRML Files (*.vrml)|*.vrml";
//                     break;
//                 case ModelFormat.STL:
//                     saveDialog.InitialDirectory = (DataDir + "\\stl");
//                     theformat = 4;
//                     filter = "STL Files (*.stl)|*.stl";
//                     break;
//                 case ModelFormat.IMAGE:
//                     saveDialog.InitialDirectory = (DataDir + "\\images");
//                     theformat = 5;
//                     filter = "Images Files (*.bmp *.gif)| *.bmp; *.gif";
//                     break;
//                 default:
//                     break;
//             }
//             saveDialog.Filter = filter;
//             if (saveDialog.ShowDialog() == DialogResult.OK)
//             {
//                 string filename = saveDialog.FileName;
//                 if (filename == "")
//                     return;
//                 this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
//                 if (!occtProxy.TranslateModel(filename, theformat, false))
//                     MessageBox.Show("Cann't write this file", "Error!",
//                             MessageBoxButtons.OK, MessageBoxIcon.Warning);
//                 this.Cursor = System.Windows.Forms.Cursors.Default;
//             }
        }

        private void ContextColor_Click(object sender, System.EventArgs e)
        {
            this.ChangeColor(true);
        }

        private void menuItem1_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.ChangeColor(false);
        }

        private void ContextWireframe_Click(object sender, System.EventArgs e)
        {
//             this.SetDisplayMode(0);
//             this.occtProxy.UpdateCurrentViewer();
//             IE_WinForms.Form1 parent = (IE_WinForms.Form1)this.ParentForm;
//             parent.SelectionChanged();
        }

        private void ContextShading_Click(object sender, System.EventArgs e)
        {
//             this.SetDisplayMode((AIS_DisplayMode)1);
//             this.occtProxy.UpdateCurrentViewer();
//             IE_WinForms.Form1 parent = (IE_WinForms.Form1)this.ParentForm;
//             parent.SelectionChanged();
        }

        private void ContMenTranc_Click(object sender, System.EventArgs e)
        {
//             IE_WinForms.TransparencyDialog dlg = new TransparencyDialog();
//             dlg.View = this.occtProxy;
//             dlg.ShowDialog(this);
        }

        private void ContMenDelete_Click(object sender, System.EventArgs e)
        {
            this.DeleteObjects();
        }

        private void ContMatBrass_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(0);
        }

        private void ContMenBronze_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(1);
        }

        private void ContMenCopper_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(2);
        }

        private void ContMenGold_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(3);
        }

        private void ContMenPewt_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(4);
        }

        private void ContMenPlaster_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(5);
        }

        private void ContMenPlastic_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(6);
        }

        private void ContMenSilver_Click(object sender, System.EventArgs e)
        {
//             this.occtProxy.UpdateCurrentViewer();
//             this.occtProxy.SetMaterial(7);
        }

        private void toolBar1_MouseHover(object sender, System.EventArgs e)
        {
            IE_WinForms.Form1 parent = (IE_WinForms.Form1)this.ParentForm;
            parent.StatusBar.Text = "View toolbar";

        }

        private void toolBar1_MouseLeave(object sender, System.EventArgs e)
        {
            IE_WinForms.Form1 parent = (IE_WinForms.Form1)this.ParentForm;
            parent.StatusBar.Text = "";
        }

        private void myPopupObject_Popup(object sender, System.EventArgs e)
        {
//             int mode = this.occtProxy.DisplayMode();
//             switch (mode)
//             {
//                 case -1:
//                     break;
//                 case 0:
//                     this.ContextWireframe.Enabled = false;
//                     this.ContextShading.Enabled = true;
//                     this.ContMenTranc.Enabled = false;
//                     break;
//                 case 1:
//                     this.ContextShading.Enabled = false;
//                     this.ContextWireframe.Enabled = true;
//                     this.ContMenTranc.Enabled = true;
//                     break;
//                 case 10:
//                     this.ContextShading.Enabled = true; ;
//                     this.ContextWireframe.Enabled = true;
//                     this.ContMenTranc.Enabled = true;
//                     break;
//                 default:
//                     break;
// 
//             }
        }

//         public OcctProxy View
//         {
//             get
//             {
//                 return this.occtProxy;
//             }
//             set
//             {
//                 this.occtProxy = value;
//             }
//         }


        public void SetIndex(int documentIndex, int viewIndex)
        {
            this.myDocumentIndex = documentIndex;
            this.myViewIndex = viewIndex;
            this.Text = System.String.Format("Document {0}:{1}", documentIndex, viewIndex);
        }

        public void SetNextIndex(Form2 other)
        {
            SetIndex(other.myDocumentIndex, other.myViewIndex + 1);
        }

//         public void SetContext(OcctProxy View)
//         {
//            // this.occtProxy.SetAISContext(View);
//         }

        private void Form2_Closed(object sender, System.EventArgs e)
        {
            IE_WinForms.Form1 parent = (IE_WinForms.Form1)this.ParentForm;
            parent.OnFileClose();
        }

        public CurrentAction3d Mode
        {
            get
            {
                return this.myCurrentMode;
            }
            set
            {
                this.myCurrentMode = value;
            }
        }

        public float Zoom
        {
            set
            {
                this.myCurZoom = value;
            }
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            //this.OcctViewer.OcctProxy.NewWindow(this.Handle);
        }

        public bool DegenerateMode
        {
            get
            {
                return this.myDegenerateModeIsOn;
            }
            set
            {
                this.myDegenerateModeIsOn = value;
            }
        }

    }

}